package com.atguigu03.date.before8;

import org.junit.Test;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * ClassName: DateTimeTest
 * Package: com.atguigu03.date.before8
 * Description:
 *
 * @Author ZY
 * @Create 14:04
 * @Version 1.0
 */
public class DateTimeTest {

    /**
     * Date类的使用
     * |--java.util.Date
     *    > 两个构造器的使用
     *    > 两个方法的使用：①toString() ②getTime()
     *      |--java.sql.Date: 对应数据库中的date类型
     */

    @Test
    public void test1(){
        Date date1 = new Date();//创建一个基于当前系统时间的Date的实例
        System.out.println(date1.toString());//Fri Aug 29 14:11:36 CST 2025

        long time = date1.getTime();
        System.out.println("对应的毫秒数为：" + time);//1756447670094

        Date date2 = new Date(175644770094L);//创建一个基于指定毫秒数的Date的实例
        System.out.println(date2.toString());
    }

    @Test
    public void test2(){
        java.sql.Date date = new java.sql.Date(175644770094L);
        System.out.println(date);//1975-07-27
    }

    /**
     * SimpleDateFormat类：用于日期时间的格式化和解析
     * 
     * 格式化：日期 --> 字符串
     * 解析：字符串 --> 日期
     */
    @Test
    public void test3() throws ParseException{
        SimpleDateFormat sdf = new SimpleDateFormat();
        //格式化：日期 --> 字符串
        Date date1 = new Date();
        String strDate = sdf.format(date1);
        System.out.println(strDate);

        //解析：字符串 --> 日期
        Date date2 = sdf.parse("2025/8/29 14:15");
        System.out.println(date2);
    }

    @Test
    public void test4() throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //格式化：日期 --> 字符串
        Date date1 = new Date();
        String strDate = sdf.format(date1);
        System.out.println(strDate);//2025-08-29 14:18:07

        //解析：字符串 --> 日期
        Date date2 = sdf.parse("2025-08-29 14:18:07");
        System.out.println(date2);

        //解析失败--因为2025/08/29 14:18:07不符合SimpleDateFormat可以识别的格式
        Date date3 = sdf.parse("2025/08/29 14:18:07");
        System.out.println(date3);
    }

    /**
     * Calendar：日历类
     * ① 实例化 由于Calendar是一个抽象类，所以我们需要创建其子类的示例，
     *    这里我们通过Calendar的静态方法getInstance()即可获取
     *
     * ② 常用方法：get(int field) / set(int field, int value) /
     * add(int field, int amount) / getTime() / setTime(Date date)
     */

    @Test
    public void test5(){
        Calendar calendar = Calendar.getInstance();
//        System.out.println(calendar.getClass());

        //get(int field)
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
        System.out.println(calendar.get(Calendar.DAY_OF_YEAR));

        //set(int field, int value)
        calendar.set(Calendar.DAY_OF_MONTH,23);
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));

        //add(int field, int amount)
        calendar.add(Calendar.DAY_OF_MONTH,3);//添加3天--26
        calendar.add(Calendar.DAY_OF_MONTH,-5);//减5天--21
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));

        //getTime(): Calendar --> Date
        Date date = calendar.getTime();
        System.out.println(date);

        //setTime(Date date): Date --> Calendar
        Date date1 = new Date();
        calendar.setTime(date1);
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));


    }
}
